package com.baiyue.utils;

import org.springframework.stereotype.Component;
import org.apache.commons.codec.binary.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

/**
 * @author WuBo
 */
@Component
public class Md5Util {
    /**
     * 定义加密方式
     */
    private static final String transformation = "DES";
    /**
     * DES的key，长度只能8位
     */
    private static final String key = "SqoP1Q=A";
    /**
     * 指定获取密钥的算法
     */
    private static final String algorithm = "DES";

    /**
     * 使用DES加密数据
     *
     * @param input          : 原文
     * @return : 密文
     * @throws Exception
     */
    public String encryptDES(String input) throws Exception {
        // 获取加密对象
        Cipher cipher = Cipher.getInstance(transformation);
        // 创建加密规则
        // 第一个参数key的字节
        // 第二个参数表示加密算法
        SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);
        // ENCRYPT_MODE：加密模式
        // DECRYPT_MODE: 解密模式
        // 初始化加密模式和算法
        cipher.init(Cipher.ENCRYPT_MODE,sks);
        // 加密
        byte[] bytes = cipher.doFinal(input.getBytes());
        // 输出加密后的数据
        return Base64.encodeBase64String(bytes);
    }

    /**
     * 使用DES解密
     *
     * @param input          : 密文
     * @throws Exception
     * @return: 原文
     */
    public String decryptDES(String input) throws Exception {
        // 1,获取Cipher对象
        Cipher cipher = Cipher.getInstance(transformation);
        // 指定密钥规则
        SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);
        cipher.init(Cipher.DECRYPT_MODE, sks);
        // 3. 解密，上面使用的base64编码，下面直接用密文
        byte[] bytes = cipher.doFinal(Base64.decodeBase64(input));
        //  因为是明文，所以直接返回
        return new String(bytes);
    }
}
